package cn.mujiankeji.mbrowser.界面.小窗页.请求

import android.widget.Space
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import cn.mujiankeji.mbrowser.app.toLocalImageName
import cn.mujiankeji.mbrowser.app.toName
import cn.mujiankeji.mbrowser.app.应用接口
import cn.mujiankeji.mbrowser.app.应用文件
import cn.mujiankeji.mbrowser.app.应用文件存储归类
import cn.mujiankeji.mbrowser.app.应用组件.应用图片
import cn.mujiankeji.mbrowser.数据.数据库.DBHomeTab
import cn.mujiankeji.mbrowser.界面.小窗页.文本编辑窗口状态
import cn.mujiankeji.mbrowser.界面.框架.小窗视图.小窗状态
import cn.mujiankeji.mbrowser.界面.组件.布局.底部窗口布局
import cn.mujiankeji.mbrowser.界面.组件.布局.底部窗口布局2
import io.github.vinceglb.filekit.FileKit
import io.github.vinceglb.filekit.dialogs.FileKitType
import io.github.vinceglb.filekit.dialogs.openFilePicker
import io.github.vinceglb.filekit.readBytes
import kotlinx.coroutines.launch
import 界面.弹窗.下拉菜单
import 界面.弹窗.下拉菜单项目


class 主页标签编辑窗口状态(val 编辑项目 : DBHomeTab ?= null) : 小窗状态(){
    var 名称 by mutableStateOf(编辑项目?.标签名称?:"")
    var 地址 by mutableStateOf(编辑项目?.链接URL?:"")
    var 图标 by mutableStateOf(编辑项目?.图标路径?:"")

    var db : DBHomeTab = 编辑项目 ?: DBHomeTab()


    fun 请求编辑图标路径(){
        文本编辑窗口状态(默认值 = 图标,{
            "图标"
        }){名称 ->
            名称?.let {
                this.图标 = 图标
            }
        }.显示()
    }

    fun 请求编辑链接URL(){
        文本编辑窗口状态(默认值 = 地址,{
            "地址"
        }){名称 ->
            名称?.let {
                this.地址 = it
            }
        }.显示()
    }

    fun 请求编辑标签名称(){
        文本编辑窗口状态(默认值 = 名称,{
            "请输入标签名称"
        }){it ->
            it?.let {
                this.名称 = it
            }
        }.显示()
    }

    fun 取消(){
        if (db.id != 0L && 编辑项目 == null){
            应用接口.界面模块().let {
                it.viewModelScope.launch {
                    it.database.主页标签().删除(db)
                    应用文件.删除图片(应用文件存储归类.主页标签,db.id)
                    super.销毁小窗()
                }
            }
        }else{
            super.销毁小窗()
        }
    }

    suspend fun 确认(){
        val database = 应用接口.界面模块().database
        db.标签名称 = 名称
        db.图标路径 = 图标
        db.链接URL = 地址

        db.排序位置 = (database.主页标签().获取最大排序()?:0) + 1
        if (db.id == 0L){
            db.id = database.主页标签().添加标签(db)
        }else{
            database.主页标签().更新标签(db)
        }


        super.销毁小窗()
    }


    suspend fun 选择本地图标(){
        val path = FileKit.openFilePicker(FileKitType.Image)?:return

        // 先保存项目 取的id
        if (db.id == 0L){
            db.id = 应用接口.界面模块().database.主页标签().添加标签(db)
        }

        if (应用文件.添加图片到应用(应用文件存储归类.主页标签,db.id,path.readBytes())){
            图标 = 应用文件存储归类.主页标签.toLocalImageName(db.id)
        }

    }

}

@Composable
fun 主页标签编辑窗口实现(state: 主页标签编辑窗口状态){

    var coroutine = rememberCoroutineScope()

    @Composable
    fun line(title : String,value : String = "",
             modifier: Modifier = Modifier
                 .padding(15.dp,10.dp)
                 .fillMaxWidth()
                 .height(55.dp),
             clickable : (()->Unit)){
        Row(modifier
            .clip(MaterialTheme.shapes.medium)
            .background(MaterialTheme.colorScheme.surfaceVariant)
            .clickable { clickable()}
            .padding(horizontal = 15.dp),
            verticalAlignment = Alignment.CenterVertically)
        {
            Text(title + ":", style = MaterialTheme.typography.labelMedium,
                color = MaterialTheme.colorScheme.secondary)

            Spacer(Modifier.width(15.dp))

            Text(value.ifEmpty { "-" }, style = MaterialTheme.typography.titleSmall,
                color = MaterialTheme.colorScheme.onSurface)
        }
    }


    底部窗口布局2(销毁 = {state.销毁小窗()}, 自适应高度 = true, 自适应键盘高度 = false){

        // 图标、名称、地址
        Row(Modifier
            .padding(15.dp,10.dp)
            .height(55.dp),
            verticalAlignment = Alignment.CenterVertically)
        {
            line("图标",state.图标,Modifier.weight(1f).fillMaxHeight()) {
                state.请求编辑图标路径()
            }
            Spacer(Modifier.width(10.dp))

            var showImgMenu by remember { mutableStateOf(false) }
            Box(Modifier.size(55.dp)
                .clickable {
                    showImgMenu = true
                },
                contentAlignment = Alignment.Center){
                应用图片(state.db.图标路径,Modifier.size(40.dp))
            }

            下拉菜单(showImgMenu,{showImgMenu = false}){
                下拉菜单项目("选择本地图标"){
                    coroutine.launch {
                        state.选择本地图标()
                    }
                    showImgMenu = false
                }
            }
        }

        // 名称
        line("名称",state.名称) {
            state.请求编辑标签名称()
        }

        // 地址
        line("地址",state.地址) {
            state.请求编辑链接URL()
        }

        Spacer(Modifier.height(15.dp))

        Row(Modifier.fillMaxWidth().padding(horizontal = 15.dp)) {
            Button({state.取消()},
                colors = ButtonDefaults.textButtonColors(containerColor = MaterialTheme.colorScheme.surfaceVariant,
                    contentColor = MaterialTheme.colorScheme.onSurfaceVariant),
                shape = MaterialTheme.shapes.medium,
                modifier = Modifier.weight(1f).height(50.dp)) {
                Text("取消")
            }

            Spacer(Modifier.width(15.dp))

            Button({coroutine.launch {
                state.确认()
            }}, colors = ButtonDefaults.textButtonColors(containerColor = MaterialTheme.colorScheme.primary,
                contentColor = MaterialTheme.colorScheme.onPrimary),
                shape = MaterialTheme.shapes.medium,
                modifier = Modifier.weight(1f).height(50.dp)) {
                Text("确定")
            }
        }
    }
}